spin button: Listen for ::cancel on gestures
authorMatthias Clasen <mclasen@redhat.com>
Thu, 2 May 2019 19:09:17 +0000 (19:09 +0000)
committerMatthias Clasen <mclasen@redhat.com>
Thu, 2 May 2019 19:54:17 +0000 (15:54 -0400)
Otherwise, we keep spinning when we should stop.

Closes: https://gitlab.gnome.org/GNOME/gtk/issues/1861
gtk/gtkspinbutton.c

index b273b2e30dde0374fa794b61526b5960243846e3..b038feb444bd0da6db87d3c7bd6ef2327447624b 100644 (file)
@@ -809,6 +809,14 @@ button_released_cb (GtkGestureMultiPress *gesture,
     }
 }
 
+static void
+button_cancel_cb (GtkGesture       *gesture,
+                  GdkEventSequence *sequence,
+                  GtkSpinButton    *spin_button)
+{
+  gtk_spin_button_stop_spinning (spin_button);
+}
+
 static void
 key_controller_key_released (GtkEventControllerKey *key,
                              guint                  keyval,
@@ -886,6 +894,7 @@ gtk_spin_button_init (GtkSpinButton *spin_button)
                                               GTK_PHASE_CAPTURE);
   g_signal_connect (gesture, "pressed", G_CALLBACK (button_pressed_cb), spin_button);
   g_signal_connect (gesture, "released", G_CALLBACK (button_released_cb), spin_button);
+  g_signal_connect (gesture, "cancel", G_CALLBACK (button_cancel_cb), spin_button);
   gtk_widget_add_controller (GTK_WIDGET (priv->down_button), GTK_EVENT_CONTROLLER (gesture));
 
   priv->up_button = gtk_button_new ();
@@ -902,6 +911,7 @@ gtk_spin_button_init (GtkSpinButton *spin_button)
                                               GTK_PHASE_CAPTURE);
   g_signal_connect (gesture, "pressed", G_CALLBACK (button_pressed_cb), spin_button);
   g_signal_connect (gesture, "released", G_CALLBACK (button_released_cb), spin_button);
+  g_signal_connect (gesture, "cancel", G_CALLBACK (button_cancel_cb), spin_button);
   gtk_widget_add_controller (GTK_WIDGET (priv->up_button), GTK_EVENT_CONTROLLER (gesture));
 
   gtk_spin_button_set_adjustment (spin_button, NULL);